package com.javafactroy.kunlong.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.Date;

@Data
public class ObjectUtils {

    public static void setNull2Default(Object obj, String key) throws IllegalAccessException {
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            Object val = field.get(obj);

            if (val == null) {
                if (field.getType().getName().equals("java.lang.String")) {
                    field.set(obj, "");
                } else
                if (field.getType().getName().equals("java.lang.Short") && !field.getName().equals(key)) {
                    field.set(obj, 0);
                } else
                if (field.getType().getName().equals("java.lang.Integer") && !field.getName().equals(key)) {
                    field.set(obj, 0);
                } else
                if (field.getType().getName().equals("java.lang.Long") && !field.getName().equals(key)) {
                    field.set(obj, 0);
                } else
                if (field.getType().getName().equals("java.math.BigDecimal")) {
                    field.set(obj, BigDecimal.ZERO);
                } else
                if (field.getType().getName().equals("java.lang.Boolean")) {
                    field.set(obj, false);
                } else
                if (field.getType().getName().equals("java.util.Date")) {
                    field.set(obj, new Date());
                }
            }

        }
    }

    public static <T> T buildQueryLikeValue(T obj, Class<T> cls) {
        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(obj));
        for (String key : jsonObject.keySet()) {
            if (jsonObject.get(key) != null) {
                if (jsonObject.get(key) instanceof String) {
                    jsonObject.put(key, "%" + jsonObject.get(key).toString() + "%");
                }
            }
        }
        return JSON.toJavaObject(jsonObject, cls);

    }

}